#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#include "MSTK.h"
#include <mpi.h>

int main(int argc, char *argv[]) {
  int i, ok;
  char mname[256],filename[256];
  char buf[256];
  char subfilename[256];
  Mesh_ptr mesh, recv_mesh, *submeshes;
  RepType rtype;
  /* default divide into two parts */
  int num = 2;
  int rank;

  /* Load the mesh */
  strcpy(mname,argv[1]);
  strcpy(filename,mname);
  strcat(filename,".mstk");
    
  /* Initialize MSTK - Always do this even if it does not seem to
     matter in this version of MSTK */
  MSTK_Init();  
  mesh = MESH_New(UNKNOWN_REP);
  ok = MESH_InitFromFile(mesh,filename);
  if (!ok) {
    fprintf(stderr,"Cannot open input file %s\n\n\n",filename);
    exit(-1);
  }
  fprintf(stdout,"mstk mesh %s read in successfully\n",filename);
  
  /* Partition the mesh*/
  rtype = MESH_RepType(mesh);
  submeshes = (Mesh_ptr *)MSTK_malloc((num)*sizeof(Mesh_ptr));
  ok = MESH_Partition(mesh,submeshes,num);
  fprintf(stdout,"%s has been partitioned into %d submeshes\n",filename,num);
  
  /* operation on submeshes */
  for(i = 0; i < num; i++) {  
    /* built ptype */
    MESH_BuildPType(mesh,submeshes[i]);
    /* add ghost */
    MESH_AddGhost(mesh,submeshes[i],1);
    MESH_BuildGhostList(submeshes[i],0);
  }

  return 1;
}

